package com.vicene.gmail.order;

import com.alibaba.cloud.seata.GlobalTransactionAutoConfiguration;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 * 本地事务失效
 * 同一个对象内事务方法互调，默认失效，因为绕过了代理对象，事务由代理控制
 * 解决：使用代理对象调用方法
 *  1）引入 aop-starter;spring-boot-starter-aop;引入aspectj
 *  2）@EnableAspectJAutoProxy(exposeProxy=true):开启aspectj动态代理，以后所有动态代理由aspectj创建（即使没有接口也可以创建代理对象）
 *      对外暴露代理对象
 *  3)用代理对象调用本类 ， 例如 OrderServiceImpl o = (OrderServiceImpl)AppContext.currentProxy();o.a() o.b()
 */

@EnableFeignClients("com.vicene.gmail.order.feign")
@EnableRedisHttpSession
@EnableRabbit
@EnableDiscoveryClient
@MapperScan("com.vicene.gmail.order.dao")
//TODO 不用seata强一致性事务，用最终一致性
@SpringBootApplication(exclude = {GlobalTransactionAutoConfiguration.class})
public class GmailOrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(GmailOrderApplication.class, args);
    }

}
